home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs49.d81
/
hack1.sfx
/
hacking1.1-3
next >
Wrap
Text File
|
1990-02-12
|
30KB
|
502 lines
╙ORRY THAT THIS IS LATER THAN ╔ HAD HOPED TO GET IT OUT, BUT HERE IT IS --
┼XPECT ANOTHER ONE SOON IN A MONTH OR TWO DEPENDING ON SUBMISSIONS... ╨RAISE,
├OMMENTS, (╔T SUCKS, ╔ LOVED IT, ETC) ARE WELCOME ->
DUCK@PEMBVAX1.PEMBROKE.EDU. ═ANY THANKS TO ├RAIG ┬RUCE FOR HIS ARTICLE ON LINE
DRAWING / DOT PLOTTING WITH THE 80 COLUMN SCREEN ON THE ├=128.
===============================================================================
╚ACKING / ╘HIS ═AGAZINE
BY ├RAIG ╘AYLOR
DUCK@PEMBVAX1.PEMBROKE.EDU
─EF:
╚ACKER - ╬OUN - ┴ TALENTED AMATEUR USER OF COMPUTERS.
╙OURCE - ╫EBSTER'S ╬EW ╫ORLD ─ICTIONARY
├ORRECTION:
╚ACKER - ╬OUN - ┴ TALENTED USER OF COMPUTERS.
╘HERE, NOW THAT WE GOT THAT OUT OF THE WAY, LET'S SEE HOW SOME PEOPLE
INTERPRET THE WORD HACKER. ╔N THE 1980'S NEWSPAPERS, MAGAZINES, MOVIES -
EVERYWHERE YA LOOKED PEOPLE WERE USING THE TERM "╚ACKER" TO DENOTE A PERSON WHO
MALICIOUSLY TRIED TO DESTROY / BORE ILL INTENT TOWARDS ANOTHER COMPUTER SYSTEM.
╘HIS WAS THE RESULT OF THE MISUNDERSTANDING OF THE ACTUAL DEFINITION OF
"╚ACKER" (UNDER MY CORRECTION ABOVE).
╘HIS MAGAZINE WILL NOT TELL PEOPLE HOW TO "PHREAK", HOW TO HHACK VOICE
MAILBOXES AND OTHER ILLEGAL ACTIVITIES. ╚OWEVER, IT WILL ATTEMPT TO REVEAL
SOME OF THE "MYSTIQUE" BEHIND SOME OF THE NEW TECHNIQUES AND ABILITIES FOUND IN
THE ├OMMODORE 64 AND ├OMMODORE 128 THAT ARE JUST NOW BEING REVEALED.
╔N THE EVENT THAT AN ARTICLE IS SUBMITTED AND THERE IS A QUESTION ABOUT IT'S
ABILITY TO BE APPLIED TOWARDS ILLEGAL ACTIVITES, THE ARTICLE WILL BE CARRIED
WITH A WARNING THAT THE INTENT IS NOT TOWARDS THAT ACTIVITY. ╚OPEFULLY, THESE
WILL NEVER COME ALONG. :-)
╘HE ├OMMODORE 64 CAME OUT IN LATE 1982 (╔ BELIEVE) AND WAS KNOWN TO ONLY
SUPPORT 16 COLORS, 320 X 200 RESOLUTION GRAPHICS OF 2 COLORS, 160X200
RESOLUTION GRAPHICS OF 4 COLORS. ╙INCE THEN PEOPLE HAVE PUSHED THE ├OMMODORE
64 TO ITS LIMITS WITH APPARENT RESOLUTION OF 320 X 200 WITH A RESOLUTION OF 4
COLORS AND EVEN HIGHER... MORE THAN 8 SPRITES ON THE SCREEN... FAST
HIGH-QUALITY DIGITIZED SOUNDS....
╘HE ├OMMODORE 128 CAME OUT AS AN "UPGRADE" FROM THE ├OMMODORE 64 AND WITH
IT'S UNIQUE MEMORY MANAGEMENT SCHEME AND THE ┌80A CHIP STILL ON THERE PEOPLE
ARE STILL FINDING OUT UNIQUE AND INTERESTING WAYS TO EXPLORE THE ├=128. ╧NE OF
THE MOST INTERESTING HAS BEEN THAT OF THE SEPERATE VIDEO DISPLAY CHIP WHICH
MAKES IT POSSIBLE TO DISPALY 640X200 RESOLUTION GRAPHICS QUICKLY AND EASILY.
**┴╘╘┼╬╘╔╧╬**
╘HIS MAGAZINE IS GOING TO BE A SOURCEBOOK OF MANY PEOPLE - ╔F YOU KNOW
ANYTHING ABOUT SOMETHING, PLEASE FEEL FREE TO SUBMIT IT. ╩UST MAIL THE ARTICLE
TO THE FOLLOWING :
DUCK@PEMBVAX1.PEMBROKE.EDU
AND A SUBJECT OF "┴╥╘╔├╠┼ - " AND THEN THE ARTICLE NAME.
╘HE SOURCE CODE FOR ALL PROGRAMS MENTIONED WITHIN ARTICLES WILL BE PROVIDED
AS WELL AS ANY EXECUTABLES UUENCODED SENT OUT SEPRATELY. [┼D. ╬OTE - ╔N THIS
ISSUE, THE SOURCE IS NOT SENT SEPERATELY DUE TO ONLY ONE ARTICLE WITH FILES]
╔N ADDITION, THE MAGAZINE WILL GO OUT WHEN THERE ARE ENOUGH ARTICLES
COLLECTED. ┴LSO, ╔'M CURRENTLY IN COLLEGE - SO - IT WILL ALSO BE DEPENDANT ON
FEW TESTS ETC BEING AROUND THE RELEASE PERIOD.
╔N THIS ISSUE:
╘ITLE ┴UTHOR(S)
------------------------------------------------------------------------------
╚ACKING - ─EFINITION ╧F DUCK@PEMBVAX1.PEMBROKE.EDU
╠EARNING ═╠ - ╨ART 1 DUCK@PEMBVAX1.PEMBROKE.EDU
6502 ╦NOWN/╒NKNOWN ╧PCODES COMPILATION OF SEVERAL
─OT ╨LOTTING & ┬ITMAPPING F2RX@JUPITER.SUN.CSD.UNB.CA
THE 8563 ╙CREEN.
** ┴LL ARTICLES AND FILES (├) 1992 BY THEIR RESPECTIVE AUTHORS.
=============================================================================
┬EGINNING ═╠ - ╨ART ╧NE
(├) 1992 BY ├RAIG ╘AYLOR
╘HE BEST WAY TO LEARN MACHINE LANGUAGE IS TO ACTUALLY CODE ROUTINES THAT YOU
DON'T THINK WILL WORK, HOPE THAT THEY WORK, AND THEN FIGURE OUT WHY THEY DON'T
WORK. (╔F THEY DO WORK, YOU TRY TO FIGURE OUT WHY YOU DIDN'T THINK THEY'D
WORK). ╔E: ╘╚┼ ┬┼╙╘ ╫┴┘ ╘╧ ╠┼┴╥╬ ┴╬┘ ╨╥╧╟╥┴══╔╬╟ ╠┴╬╟╒┴╟┼ ╔╙ ╘╧ ╨╥╧╟╥┴═ ╔╬
╘╚┴╘ ╠┴╬╟╒┴╟┼. ┴ND ═ACHINE ╠ANGUAGE IS A PROGRAMMING LANGUAGE.
╬OW, LET'S GET A FEW TERMS AND DEFINITIONS OUT OF THE WAY:
═ACHINE ╠ANGUAGE - ╔NSTRUCTIONS THAT THE COMPUTER UNDERSTANDS AT A PRIMITIVE
LEVEL AND EXECUTES ACCORDINGLY.
┴SSEMBLY ╠ANGUAGE - ╔NSTRUCTIONS MORE UNDERSTANDABLE TO HUMANS THAN PURE
═ACHINE ╠ANGUAGE THAT MAKES LIFE EASIER.
┴SSEMBLY: ═ACHINE:
┼XAMPLE: LDA #$00 $┴9 $00
╚UH? YOU MIGHT BE SAYING AT THE MOMENT. ╘URNS OUT THAT ╠─┴ STANDS FOR, OR IS
A MNEMONIC (COMPUTER PEOPLE ALWAYS COME UP WITH THESE BIG LONG WORDS -- YOU'LL
SEE MNEMONIC'S OFTEN WHEN DEALING WITH MACHINE LANGUAGE) FOR THE FOLLOWING:
"╠╧┴─ REGISTER ┴ WITH THE FOLLOWING VALUE"
^ ^ ^
├OOL 'EH? ┘EAH, BUT THERE'S SOMEBODY GRUMBLING NOW ABOUT WHY NOT MAKE IT
╠╧┴─┴ ETC.. ╚EY, THAT'S LIFE. (╟╥╔╬).
╧H, MORE DEFINITIONS:
╥EGISTER - ┴ LOCATION INSIDE THE ├╨╒ THAT CAN BE MANIPULATED DIRECTLY WITHOUT
HAVING TO ACCESS MEMORY.
╘HE "┴" REGISTER IS OFTEN CALLED THE ACCUMALATOR WHICH INDICATES ITS
FUNCTION: ALL MATH AND LOGICAL MANIPULATIONS ARE DONE TO THE "┴" REGISTER (FROM
HEREON OUT IT WILL BE REFERRED TO AS .┴).
╘HERE ARE TWO OTHER REGISTERS INSIDE THE 6502 PROCESSOR, SPECIFICALLY .╪ AND
.┘. ╘HESE REGISTERS HELP ACT AS COUNTERS AND INDEXES INTO MEMORY (SORTA LIKE
MEM[X] IN PASCAL BUT NOT QUITE...).
╬OW, LET'S ADD 3 AND 5 AND LEAVE THE RESULT IN THE ACCUMALATOR (.┴).
LDA #3 ; ╚ERE .┴ = 3 (ANYTHING W/ A ; IS A
; COMMENT AND WILL BE IGNORED BY THE ASSEMBLER...
CLC ; HU? - ╘HIS CLEARS THE CARRY. ╘HE 6502
; DOES ADDITION *EVERYTIME* WITH THE CARRY ... SO IF WE CLEAR IT IT WON'T
; AFFECT THE RESULT.
ADC #5 ; ╬OW, .┴ = .┴ + 5
AND WE'RE DONE. ╔F THE ├╠├ CONFUSED YOU THEN CONSIDER THAT IF YOU'RE ADDING
A COLUMN OF #'S:
12 <--\__╘HE 2 + 9 = 11, BUT WE PUT THE 1 DOWN AND SET THE CARRY TO 1.
+ 89 <---/
--
101
╘HEN WE SAY 1 + 8 + CARRY , WHICH IN THIS CASE HAPPENS TO = 1 AND WE GET 10
AND AGAIN WE SET THE CARRY AND WRITE DOWN 0. ╘HEN IT'S JUST THE CARRY AND WE
WRITE THAT DOWN. ╔F WE DIDN'T CLEAR THE CARRY WE MAY HAVE ENDED UP WITH THE
VALUE OF 9 INSTEAD 8 IF THE CARRY HAD HAPPENED TO BE SET.
┴AAGH, ═ATH - ╠ET'S CONTINUE - ╘HE ├╠├ MNEMONIC STANDS FOR "├╠┼┴╥ ├┴╥╥┘" AND
THE ┴─├ STANDS FOR "┴── WITH ├┴╥╥┘". ╧N MANY PROCESSORS THERE IS A ┴──
(WITHOUT A CARRY) BUT UNFORTUNATELY THE 6502 PROCESSOR INSIDE THE ├=64 DOESN'T
HAVE IT.
╙O WE'VE GOT:
LOAD REG ┴ WITH THE VALUE 5 LDA #5
CLEAR THE CARRY CLC
ADD REG A AND VALUE 3 ADC #3
╔N ┬ASIC IT'S JUST:
┴ = 5+3
╧NE STATEMENT... ╔N ═ACHINE ╠ANGUAGE YOU'VE GOT TO BREAK EVERYTHING DOWN INTO
SMALLER AND SMALLER STEPS AND QUITE OFTEN THE ═╠ LISTING WILL BE FAR LONGER
THAN THE ┬┴╙╔├ OR ╨┴╙├┴╠ OR ├ EQUIVLENT.
─EFINITIONS:
┴SSEMBLER - ╨ROGRAM TAKES SOURCE CODE IN BASIC FORM OR FROM A FILE AND
WRITES TO MEMORY OR A FILE THE RESULTING EXECUTABLE. ┴LLOWS HIGHER FLEXIBILITY
THAN A MONITOR (SEE BELOW) DUE TO USE OF LABELS ETC AND NOT HAVING TO KEEP
TRACK OF EACH ADDRESS WITHIN THE PROGRAM.
═ONITOR - ┴ PROGRAM, RESIDENT IN MEMORY, INVOKED BY A SYS CALL FROM BASIC OR
BY HITTING THE RESTORE KEY THAT WILL LET YOU DISASSEMBLE, ASSEMBLE AND EXAMINE
AREAS OF MEMORY AND EXECUTE PROGRAMS DIRECTLY FROM THE MONITOR. ╒SEFUL FOR
DEBUGGING PROGRAMS AND FOR WRITING SHORT PROGRAMS.
╠ET'S ENTER THE FOLLOWING INTO A MONITOR (IF YOU DON'T HAVE ONE THEN CONTACT
DUCK@PEMBVAX1.PEMBROKE.EDU AND ╔'LL SEND YA ONE):
128: C64:
>A 1300 LDA #$93 >A C000 LDA #$93
>A 1302 JSR $FFD2 >A C003 JSR $FFD2
>A 1305 RTS >A C005 RTS
(EXIT MONITOR) (EXIT MONITOR)
BANK15:SYS4864 SYS 49152
╫OW! ╔T CLEARED THE SCREEN. ╬EAT 'EH? ┬UT SEE HOW MUCH YA GOTTA BREAK
PROBLEMS DOWN? ╘HE FIRST STATEMENT LOADS IN $93 HEX INTO THE ACCUMALATOR ($93
HEX JUST HAPPENS TO EQUAL 147 WHICH IS ALSO THE ├OMMODORSCII CODE FOR CLEAR
SCREEN. ╞OR A WHOLE LIST JUST LOOK IN THE BACK OF THE BOOK THAT CAME WITH THE
COMPUTER). ╘HEN WE JUMP TO A SYSTEM ROUTINE WHICH ├OMMODORE SO GRACIOUSLY
SUPPLIED US WITH THAT PRINTS THE VALUE OF THE CHARACTER IN .┴ TO THE SCREEN.
(JSR $FFD2) THEN WE DO A ╥╘╙ (╥E╘URN FROM ╙UBROUTINE) SO THAT WE WILL GO BACK
TO BASIC AND THE ╥EADY PROMPT WHEN WE ARE FINISHED WITH THE SYS CALL.
┘OU ├= 128 PEOPLE MAY BE WONDERING WHY YOU HAD TO DO A BANK 15 AND ASSEMBLE
THE STUFF AT A DIFFERENT MEMORY LOCATION. ╘URNS OUT THAT THE ├128 MEMORY MAP
OF WHERE ROUTINES ETC ARE AT IS MUCH MORE COMPLEX THAN THE ├=64 AND THUS YOU
HAVE TO TELL BASIC WHICH BANK YOU WISH TO HAVE ALL SYS, PEEK, AND POKE CALLS TO
TAKE PLACE IN. ┴LSO, $C000 AS USED ON THE ├=64 IS NOT AN AREA THAT IS FREE TO
USE ON THE ├128 IN THIS MANNER.
┴SSIGNMENT: ╘AKE A LOOK @ THE DIFFERENT COMMANDS AS LISTED IN 6502 ╧PCODES
AND TRY TO UNDERSTAND WHAT THEY DO. ┼XPERIMENT WITH THE JSR $FFD2 ROUTINE BY
USING DIFFERENT VALUES ETC.
╬EXT ╘IME: ╨RINTING OUT STRINGS, AND UNDERSTANDING '╔NDEXING'.
===========================================================================
6502 ╧PCODES AND ╤UASI-╧PCODES.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
╘HE FOLLOWING TABLE LISTS ALL OF THE AVAILABLE OPCODES ON THE 65XX LINE OF
MICRO-PROCESSORS (SUCH AS THE 6510 ON THE ├=64 AND THE 8502 ON THE ├=128)
-----------------------------------------------------------------------------
╙TD ═NEMONIC ╚EX ╓ALUE ─ESCRIPTION ┴DDRESSING ═ODE ┬YTES/╘IME
* ┬╥╦ $00 ╙TACK <- ╨├, ╨├ <- ($FFFE) (╔MMEDIATE) 1/7
* ╧╥┴ $01 ┴ <- (┴) ╓ ═ (╔ND,╪) 6/2
╩┴═ $02 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╙╠╧ $03 ═ <- (═ >> 1) + ┴ + ├ (╔ND,╪) 2/8
╬╧╨ $04 [NO OPERATION] (┌-╨AGE) 2/3
* ╧╥┴ $05 ┴ <- (┴) ╓ ═ (┌-╨AGE) 2/3
* ┴╙╠ $06 ├ <- ┴7, ┴ <- (┴) << 1 (┌-╨AGE) 2/5
╙╠╧ $07 ═ <- (═ >> 1) + ┴ + ├ (┌-╨AGE) 2/5
* ╨╚╨ $08 ╙TACK <- (╨) (╔MPLIED) 1/3
* ╧╥┴ $09 ┴ <- (┴) ╓ ═ (╔MMEDIATE) 2/2
* ┴╙╠ $0┴ ├ <- ┴7, ┴ <- (┴) << 1 (┴CCUMALATOR) 1/2
┴╬├ $0┬ ┴ <- ┴ /\ ═, ├=~┴7 (╔MMEDIATE) 1/2
╬╧╨ $0├ [NO OPERATION] (┴BSOLUTE) 3/4
* ╧╥┴ $0─ ┴ <- (┴) ╓ ═ (┴BSOLUTE) 3/4
* ┴╙╠ $0┼ ├ <- ┴7, ┴ <- (┴) << 1 (┴BSOLUTE) 3/6
╙╠╧ $0╞ ═ <- (═ >> 1) + ┴ + ├ (┴BSOLUTE) 3/6
* ┬╨╠ $10 IF ╬=0, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ╧╥┴ $11 ┴ <- (┴) ╓ ═ ((╔ND),┘) 2/5'1
╩┴═ $12 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╙╠╧ $13 ═ <- (═ >. 1) + ┴ + ├ ((╔ND),┘) 2/8'5
╬╧╨ $14 [NO OPERATION] (┌-╨AGE,╪) 2/4
* ╧╥┴ $15 ┴ <- (┴) ╓ ═ (┌-╨AGE,╪) 2/4
* ┴╙╠ $16 ├ <- ┴7, ┴ <- (┴) << 1 (┌-╨AGE,╪) 2/6
╙╠╧ $17 ═ <- (═ >> 1) + ┴ + ├ (┌-╨AGE,╪) 2/6
* ├╠├ $18 ├ <- 0 (╔MPLIED) 1/2
* ╧╥┴ $19 ┴ <- (┴) ╓ ═ (┴BSOLUTE,┘) 3/4'1
╬╧╨ $1┴ [NO OPERATION] (╔MPLIED) 1/2
╙╠╧ $1┬ ═ <- (═ >> 1) + ┴ + ├ (┴BSOLUTE,┘) 3/7
╬╧╨ $1├ [NO OPERATION] (┴BSOLUTE,╪) 2/4'1
* ╧╥┴ $1─ ┴ <- (┴) ╓ ═ (┴BSOLUTE,╪) 3/4'1
* ┴╙╠ $1┼ ├ <- ┴7, ┴ <- (┴) << 1 (┴BSOLUTE,╪) 3/7
╙╠╧ $1╞ ═ <- (═ >> 1) + ┴ + ├ (┴BSOLUTE,╪) 3/7
* ╩╙╥ $20 ╙TACK <- ╨├, ╨├ <- ┴DDRESS (┴BSOLUTE) 3/6
* ┴╬─ $21 ┴ <- (┴) /\ ═ (╔ND,╪) 2/6
╩┴═ $22 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╥╠┴ $23 ═ <- (═ << 1) /\ (┴) (╔ND,╪) 2/8
* ┬╔╘ $24 ┌ <- ~(┴ /\ ═) ╬<-═7 ╓<-═6 (┌-╨AGE) 2/3
* ┴╬─ $25 ┴ <- (┴) /\ ═ (┌-╨AGE) 2/3
* ╥╧╠ $26 ├ <- ┴7 & ┴ <- ┴ << 1 + ├ (┌-╨AGE) 2/5
╥╠┴ $27 ═ <- (═ << 1) /\ (┴) (┌-╨AGE) 2/5'5
* ╨╠╨ $28 ┴ <- (╙TACK) (╔MPLIED) 1/4
* ┴╬─ $29 ┴ <- (┴) /\ ═ (╔MMEDIATE) 2/2
* ╥╧╠ $2┴ ├ <- ┴7 & ┴ <- ┴ << 1 + ├ (┴CCUMALATOR) 1/2
┴╬├ $2┬ ┴ <- ┴ /\ ═, ├ <- ~┴7 (╔MMEDIATE9 1/2
* ┬╔╘ $2├ ┌ <- ~(┴ /\ ═) ╬<-═7 ╓<-═6 (┴BSOLUTE) 3/4
* ┴╬─ $2─ ┴ <- (┴) /\ ═ (┴BSOLUTE) 3/4
* ╥╧╠ $2┼ ├ <- ┴7 & ┴ <- ┴ << 1 + ├ (┴BSOLUTE) 3/6
╥╠┴ $2╞ ═ <- (═ << 1) /\ (┴) (┴BSOLUTE) 3/6'5
* ┬═╔ $30 IF ╬=1, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ┴╬─ $31 ┴ <- (┴) /\ ═ ((╔ND),┘) 2/5'1
╩┴═ $32 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╥╠┴ $33 ═ <- (═ << 1) /\ (┴) ((╔ND),┘) 2/8'5
╬╧╨ $34 [NO OPERATION] (┌-╨AGE,╪) 2/4
* ┴╬─ $35 ┴ <- (┴) /\ ═ (┌-╨AGE,╪) 2/4
* ╥╧╠ $36 ├ <- ┴7 & ┴ <- ┴ << 1 + ├ (┌-╨AGE,╪) 2/6
╥╠┴ $37 ═ <- (═ << 1) /\ (┴) (┌-╨AGE,╪) 2/6'5
* ╙┼├ $38 ├ <- 1 (╔MPLIED) 1/2
* ┴╬─ $39 ┴ <- (┴) /\ ═ (┴BSOLUTE,┘) 3/4'1
╬╧╨ $3┴ [NO OPERATION] (╔MPLIED) 1/2
╥╠┴ $3┬ ═ <- (═ << 1) /\ (┴) (┴BSOLUTE,┘) 3/7'5
╬╧╨ $3├ [NO OPERATION] (┴BSOLUTE,╪) 3/4'1
* ┴╬─ $3─ ┴ <- (┴) /\ ═ (┴BSOLUTE,╪) 3/4'1
* ╥╧╠ $3┼ ├ <- ┴7 & ┴ <- ┴ << 1 + ├ (┴BSOLUTE,╪) 3/7
╥╠┴ $3╞ ═ <- (═ << 1) /\ (┴) (┴BSOLUTE,╪) 3/7'5
* ╥╘╔ $40 ╨ <- (╙TACK), ╨├ <-(╙TACK) (╔MPLIED) 1/6
* ┼╧╥ $41 ┴ <- (┴) \-/ ═ (╔ND,╪) 2/6
╩┴═ $42 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╙╥┼ $43 ═ <- (═ >> 1) \-/ ┴ (╔ND,╪) 2/8
╬╧╨ $44 [NO OPERATION] (┌-╨AGE) 2/3
* ┼╧╥ $45 ┴ <- (┴) \-/ ═ (┌-╨AGE) 2/3
* ╠╙╥ $46 ├ <- ┴0, ┴ <- (┴) >> 1 (┴BSOLUTE,╪) 3/7
╙╥┼ $47 ═ <- (═ >> 1) \-/ ┴ (┌-╨AGE) 2/5
* ╨╚┴ $48 ╙TACK <- (┴) (╔MPLIED) 1/3
* ┼╧╥ $49 ┴ <- (┴) \-/ ═ (╔MMEDIATE) 2/2
* ╠╙╥ $4┴ ├ <- ┴0, ┴ <- (┴) >> 1 (┴CCUMALATOR) 1/2
┴╙╥ $4┬ ┴ <- [(┴ /\ ═) >> 1] (╔MMEDIATE) 1/2
* ╩═╨ $4├ ╨├ <- ┴DDRESS (┴BSOLUTE) 3/3
* ┼╧╥ $4─ ┴ <- (┴) \-/ ═ (┴BSOLUTE) 3/4
* ╠╙╥ $4┼ ├ <- ┴0, ┴ <- (┴) >> 1 (┴BSOLUTE) 3/6
╙╥┼ $4╞ ═ <- (═ >> 1) \-/ ┴ (┴BSOLUTE) 3/6
* ┬╓├ $50 IF ╓=0, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ┼╧╥ $51 ┴ <- (┴) \-/ ═ ((╔ND),┘) 2/5'1
╩┴═ $52 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╙╥┼ $53 ═ <- (═ >> 1) \-/ ┴ ((╔ND),┘) 2/8
╬╧╨ $54 [NO OPERATION] (┌-╨AGE,╪) 2/4
* ┼╧╥ $55 ┴ <- (┴) \-/ ═ (┌-╨AGE,╪) 2/4
* ╠╙╥ $56 ├ <- ┴0, ┴ <- (┴) >> 1 (┌-╨AGE,╪) 2/6
╙╥┼ $57 ═ <- (═ >> 1) \-/ ┴ (┌-╨AGE,╪) 2/6
* ├╠╔ $58 ╔ <- 0 (╔MPLIED) 1/2
* ┼╧╥ $59 ┴ <- (┴) \-/ ═ (┴BSOLUTE,┘) 3/4'1
╬╧╨ $5┴ [NO OPERATION] (╔MPLIED) 1/2
╙╥┼ $5┬ ═ <- (═ >> 1) \-/ ┴ (┴BSOLUTE,┘) 3/7
╬╧╨ $5├ [NO OPERATION] (┴BSOLUTE,╪) 3/4'1
* ┼╧╥ $5─ ┴ <- (┴) \-/ ═ (┴BSOLUTE,╪) 3/4'1
╙╥┼ $5╞ ═ <- (═ >> 1) \-/ ┴ (┴BSOLUTE,╪) 3/7
* ╥╘╙ $60 ╨├ <- (╙TACK) (╔MPLIED) 1/6
* ┴─├ $61 ┴ <- (┴) + ═ + ├ (╔ND,╪) 2/6
╩┴═ $62 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╥╥┴ $63 ═ <- (═ >> 1) + (┴) + ├ (╔ND,╪) 2/8'5
╬╧╨ $64 [NO OPERATION] (┌-╨AGE) 2/3
* ┴─├ $65 ┴ <- (┴) + ═ + ├ (┌-╨AGE) 2/3
* ╥╧╥ $66 ├<-┴0 & ┴<- (┴7=├ + ┴>>1) (┌-╨AGE) 2/5
╥╥┴ $67 ═ <- (═ >> 1) + (┴) + ├ (┌-╨AGE) 2/5'5
* ╨╠┴ $68 ┴ <- (╙TACK) (╔MPLIED) 1/4
* ┴─├ $69 ┴ <- (┴) + ═ + ├ (╔MMEDIATE) 2/2
* ╥╧╥ $6┴ ├<-┴0 & ┴<- (┴7=├ + ┴>>1) (┴CCUMALATOR) 1/2
┴╥╥ $6┬ ┴ <- [(┴ /\ ═) >> 1] (╔MMEDIATE) 1/2'5
* ╩═╨ $6├ ╨├ <- ┴DDRESS (╔NDIRECT) 3/5
* ┴─├ $6─ ┴ <- (┴) + ═ + ├ (┴BSOLUTE) 3/4
* ╥╧╥ $6┼ ├<-┴0 & ┴<- (┴7=├ + ┴>>1) (┴BSOLUTE) 3/6
╥╥┴ $6╞ ═ <- (═ >> 1) + (┴) + ├ (┴BSOLUTE) 3/6'5
* ┬╓╙ $70 IF ╓=1, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ┴─├ $71 ┴ <- (┴) + ═ + ├ ((╔ND),┘) 2/5'1
╩┴═ $72 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╥╥┴ $73 ═ <- (═ >> 1) + (┴) + ├ ((╔ND),┘) 2/8'5
╬╧╨ $74 [NO OPERATION] (┌-╨AGE,╪) 2/4
* ┴─├ $75 ┴ <- (┴) + ═ + ├ (┌-╨AGE,╪) 2/4
* ╥╧╥ $76 ├<-┴0 & ┴<- (┴7=├ + ┴>>1) (┌-╨AGE,╪) 2/6
╥╥┴ $77 ═ <- (═ >> 1) + (┴) + ├ (┌-╨AGE,╪) 2/6'5
* ╙┼╔ $78 ╔ <- 1 (╔MPLIED) 1/2
* ┴─├ $79 ┴ <- (┴) + ═ + ├ (┴BSOLUTE,┘) 3/4'1
╬╧╨ $7┴ [NO OPERATION] (╔MPLIED) 1/2
╥╥┴ $7┬ ═ <- (═ >> 1) + (┴) + ├ (┴BSOLUTE,┘) 3/7'5
╬╧╨ $7├ [NO OPERATION] (┴BSOLUTE,╪) 3/4'1
* ┴─├ $7─ ┴ <- (┴) + ═ + ├ (┴BSOLUTE,╪) 3/4'1
* ╥╧╥ $7┼ ├<-┴0 & ┴<- (┴7=├ + ┴>>1) (┴BSOLUTE,╪) 3/7
╥╥┴ $7╞ ═ <- (═ >> 1) + (┴) + ├ (┴BSOLUTE,╪) 3/7'5
╬╧╨ $80 [NO OPERATION] (╔MMEDIATE) 2/2
* ╙╘┴ $81 ═ <- (┴) (╔ND,╪) 2/6
╬╧╨ $82 [NO OPERATION] (╔MMEDIATE) 2/2
╙┴╪ $83 ═ <- (┴) /\ (╪) (╔ND,╪) 2/6
* ╙╘┘ $84 ═ <- (┘) (┌-╨AGE) 2/3
* ╙╘┴ $85 ═ <- (┴) (┌-╨AGE) 2/3
* ╙╘╪ $86 ═ <- (╪) (┌-╨AGE) 2/3
╙┴╪ $87 ═ <- (┴) /\ (╪) (┌-╨AGE) 2/3
* ─┼┘ $88 ┘ <- (┘) - 1 (╔MPLIED) 1/2
╬╧╨ $89 [NO OPERATION] (╔MMEDIATE) 2/2
* ╘╪┴ $8┴ ┴ <- (╪) (╔MPLIED) 1/2
┴╬┼ $8┬ ═ <-[(┴)\/$┼┼] /\ (╪)/\(═) (╔MMEDIATE) 2/2^4
* ╙╘┘ $8├ ═ <- (┘) (┴BSOLUTE) 3/4
* ╙╘┴ $8─ ═ <- (┴) (┴BSOLUTE) 3/4
* ╙╘╪ $8┼ ═ <- (╪) (┴BSOLUTE) 3/4
╙┴╪ $8╞ ═ <- (┴) /\ (╪) (┴BSOLUTE) 3/4
* ┬├├ $90 IF ├=0, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ╙╘┴ $91 ═ <- (┴) ((╔ND),┘) 2/6
╩┴═ $92 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╙╚┴ $93 ═ <- (┴) /\ (╪) /\ (╨├╚+1) (┴BSOLUTE,╪) 3/6'3
* ╙╘┘ $94 ═ <- (┘) (┌-╨AGE,╪) 2/4
* ╙╘┴ $95 ═ <- (┴) (┌-╨AGE,╪) 2/4
╙┴╪ $97 ═ <- (┴) /\ (╪) (┌-╨AGE,┘) 2/4
* ╙╘╪ $96 ═ <- (╪) (┌-╨AGE,┘) 2/4
* ╘┘┴ $98 ┴ <- (┘) (╔MPLIED) 1/2
* ╙╘┴ $99 ═ <- (┴) (┴BSOLUTE,┘) 3/5
* ╘╪╙ $9┴ ╙ <- (╪) (╔MPLIED) 1/2
╙╚╙ $9┬ ╪ <- (┴) /\ (╪), ╙ <- (╪) (┴BSOLUTE,┘) 3/5
═ <- (╪) /\ (╨├╚+1)
╙╚┘ $9├ ═ <- (┘) /\ (╨├╚+1) (┴BSOLUTE,┘) 3/5'3
* ╙╘┴ $9─ ═ <- (┴) (┴BSOLUTE,╪) 3/5
╙╚╪ $9┼ ═ <- (╪) /\ (╨├╚+1) (┴BSOLUTE,╪) 3/5'3
╙╚┴ $9╞ ═ <- (┴) /\ (╪) /\ (╨├╚+1) (┴BSOLUTE,┘) 3/5'3
* ╠─┘ $┴0 ┘ <- ═ (╔MMEDIATE) 2/2
* ╠─┴ $┴1 ┴ <- ═ (╔ND,╪) 2/6
* ╠─╪ $┴2 ╪ <- ═ (╔MMEDIATE) 2/2
╠┴╪ $┴3 ┴ <- ═, ╪ <- ═ (╔ND,╪) 2/6
* ╠─┘ $┴4 ┘ <- ═ (┌-╨AGE) 2/3
* ╠─┴ $┴5 ┴ <- ═ (┌-╨AGE) 2/3
* ╠─╪ $┴6 ╪ <- ═ (┌-╨AGE) 2/3
╠┴╪ $┴7 ┴ <- ═, ╪ <- ═ (┌-╨AGE) 2/3
* ╘┴┘ $┴8 ┘ <- (┴) (╔MPLIED) 1/2
* ╠─┴ $┴9 ┴ <- ═ (╔MMEDIATE) 2/2
* ╘┴╪ $┴┴ ╪ <- (┴) (╔MPLIED) 1/2
╠╪┴ $┴┬ ╪04 <- (╪04) /\ ═04 (╔MMEDIATE) 1/2
┴04 <- (┴04) /\ ═04
* ╠─┘ $┴├ ┘ <- ═ (┴BSOLUTE) 3/4
* ╠─┴ $┴─ ┴ <- ═ (┴BSOLUTE) 3/4
* ╠─╪ $┴┼ ╪ <- ═ (┴BSOLUTE) 3/4
╠┴╪ $┴╞ ┴ <- ═, ╪ <- ═ (┴BSOLUTE) 3/4
* ┬├╙ $┬0 IF ├=1, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ╠─┴ $┬1 ┴ <- ═ ((╔ND),┘) 2/5'1
╩┴═ $┬2 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╠┴╪ $┬3 ┴ <- ═, ╪ <- ═ ((╔ND),┘) 2/5'1
* ╠─┘ $┬4 ┘ <- ═ (┌-╨AGE,╪) 2/4
* ╠─┴ $┬5 ┴ <- ═ (┌-╨AGE,╪) 2/4
* ╠─╪ $┬6 ╪ <- ═ (┌-╨AGE,┘) 2/4
╠┴╪ $┬7 ┴ <- ═, ╪ <- ═ (┌-╨AGE,┘) 2/4
* ├╠╓ $┬8 ╓ <- 0 (╔MPLIED) 1/2
* ╠─┴ $┬9 ┴ <- ═ (┴BSOLUTE,┘) 3/4'1
* ╘╙╪ $┬┴ ╪ <- (╙) (╔MPLIED) 1/2
╠┴┼ $┬┬ ╪,╙,┴ <- (╙ /\ ═) (┴BSOLUTE,┘) 3/4'1
* ╠─┘ $┬├ ┘ <- ═ (┴BSOLUTE,╪) 3/4'1
* ╠─┴ $┬─ ┴ <- ═ (┴BSOLUTE,╪) 3/4'1
* ╠─╪ $┬┼ ╪ <- ═ (┴BSOLUTE,┘) 3/4'1
╠┴╪ $┬╞ ┴ <- ═, ╪ <- ═ (┴BSOLUTE,┘) 3/4'1
* ├╨┘ $├0 (┘ - ═) -> ╬┌├ (╔MMEDIATE) 2/2
* ├═╨ $├1 (┴ - ═) -> ╬┌├ (╔ND,╪) 2/6
╬╧╨ $├2 [NO OPERATION] (╔MMEDIATE) 2/2
─├╨ $├3 ═ <- (═)-1, (┴-═) -> ╬┌├ (╔ND,╪) 2/8
* ├╨┘ $├4 (┘ - ═) -> ╬┌├ (┌-╨AGE) 2/3
* ├═╨ $├5 (┴ - ═) -> ╬┌├ (┌-╨AGE) 2/3
* ─┼├ $├6 ═ <- (═) - 1 (┌-╨AGE) 2/5
─├╨ $├7 ═ <- (═)-1, (┴-═) -> ╬┌├ (┌-╨AGE) 2/5
* ╔╬┘ $├8 ┘ <- (┘) + 1 (╔MPLIED) 1/2
* ├═╨ $├9 (┴ - ═) -> ╬┌├ (╔MMEDIATE) 2/2
* ─┼╪ $├┴ ╪ <- (╪) - 1 (╔MPLIED) 1/2
╙┬╪ $├┬ ╪ <- (╪)/\(┴) - ═ (╔MMEDIATE) 2/2
* ├╨┘ $├├ (┘ - ═) -> ╬┌├ (┴BSOLUTE) 3/4
* ├═╨ $├─ (┴ - ═) -> ╬┌├ (┴BSOLUTE) 3/4
* ─┼├ $├┼ ═ <- (═) - 1 (┴BSOLUTE) 3/6
─├╨ $├╞ ═ <- (═)-1, (┴-═) -> ╬┌├ (┴BSOLUTE) 3/6
* ┬╬┼ $─0 IF ┌=0, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ├═╨ $─1 (┴ - ═) -> ╬┌├ ((╔ND),┘) 2/5'1
╩┴═ $─2 [LOCKS UP MACHINE] (╔MPLIED) 1/-
─├╨ $─3 ═ <- (═)-1, (┴-═) -> ╬┌├ ((╔ND),┘) 2/8
╬╧╨ $─4 [NO OPERATION] (┌-╨AGE,╪) 2/4
* ├═╨ $─5 (┴ - ═) -> ╬┌├ (┌-╨AGE,╪) 2/4
* ─┼├ $─6 ═ <- (═) - 1 (┌-╨AGE,╪) 2/6
─├╨ $─7 ═ <- (═)-1, (┴-═) -> ╬┌├ (┌-╨AGE,╪) 2/6
* ├╠─ $─8 ─ <- 0 (╔MPLIED) 1/2
* ├═╨ $─9 (┴ - ═) -> ╬┌├ (┴BSOLUTE,┘) 3/4'1
╬╧╨ $─┴ [NO OPERATION] (╔MPLIED) 1/2
─├╨ $─┬ ═ <- (═)-1, (┴-═) -> ╬┌├ (┴BSOLUTE,┘) 3/7
╬╧╨ $─├ [NO OPERATION] (┴BSOLUTE,╪) 3/4'1
* ├═╨ $── (┴ - ═) -> ╬┌├ (┴BSOLUTE,╪) 3/4'1
* ─┼├ $─┼ ═ <- (═) - 1 (┴BSOLUTE,╪) 3/7
─├╨ $─╞ ═ <- (═)-1, (┴-═) -> ╬┌├ (┴BSOLUTE,╪) 3/7
* ├╨╪ $┼0 (╪ - ═) -> ╬┌├ (╔MMEDIATE) 2/2
* ╙┬├ $┼1 ┴ <- (┴) - ═ - ~├ (╔ND,╪) 2/6
╬╧╨ $┼2 [NO OPERATION] (╔MMEDIATE) 2/2
╔╙┬ $┼3 ═ <- (═) - 1,┴ <- (┴)-═-~├ (╔ND,╪) 3/8'1
* ├╨╪ $┼4 (╪ - ═) -> ╬┌├ (┌-╨AGE) 2/3
* ╙┬├ $┼5 ┴ <- (┴) - ═ - ~├ (┌-╨AGE) 2/3
* ╔╬├ $┼6 ═ <- (═) + 1 (┌-╨AGE) 2/5
╔╙┬ $┼7 ═ <- (═) - 1,┴ <- (┴)-═-~├ (┌-╨AGE) 2/5
* ╔╬╪ $┼8 ╪ <- (╪) +1 (╔MPLIED) 1/2
* ╙┬├ $┼9 ┴ <- (┴) - ═ - ~├ (╔MMEDIATE) 2/2
* ╬╧╨ $┼┴ [NO OPERATION] (╔MPLIED) 1/2
╙┬├ $┼┬ ┴ <- (┴) - ═ - ~├ (╔MMEDIATE) 1/2
* ╙┬├ $┼─ ┴ <- (┴) - ═ - ~├ (┴BSOLUTE) 3/4
* ├╨╪ $┼├ (╪ - ═) -> ╬┌├ (┴BSOLUTE) 3/4
* ╔╬├ $┼┼ ═ <- (═) + 1 (┴BSOLUTE) 3/6
╔╙┬ $┼╞ ═ <- (═) - 1,┴ <- (┴)-═-~├ (┴BSOLUTE) 3/6
* ┬┼╤ $╞0 IF ┌=1, ╨├ = ╨├ + OFFSET (╥ELATIVE) 2/2'2
* ╙┬├ $╞1 ┴ <- (┴) - ═ - ~├ ((╔ND),┘) 2/5'1
╩┴═ $╞2 [LOCKS UP MACHINE] (╔MPLIED) 1/-
╔╙┬ $╞3 ═ <- (═) - 1,┴ <- (┴)-═-~├ ((╔ND),┘) 2/8
╬╧╨ $╞4 [NO OPERATION] (┌-╨AGE,╪) 2/4
* ╙┬├ $╞5 ┴ <- (┴) - ═ - ~├ (┌-╨AGE,╪) 2/4
* ╔╬├ $╞6 ═ <- (═) + 1 (┌-╨AGE,╪) 2/6
╔╙┬ $╞7 ═ <- (═) - 1,┴ <- (┴)-═-~├ (┌-╨AGE,╪) 2/6
* ╙┼─ $╞8 ─ <- 1 (╔MPLIED) 1/2
* ╙┬├ $╞9 ┴ <- (┴) - ═ - ~├ (┴BSOLUTE,┘) 3/4'1
╬╧╨ $╞┴ [NO OPERATION] (╔MPLIED) 1/2
╔╙┬ $╞┬ ═ <- (═) - 1,┴ <- (┴)-═-~├ (┴BSOLUTE,┘) 3/7
╬╧╨ $╞├ [NO OPERATION] (┴BSOLUTE,╪) 3/4'1
* ╙┬├ $╞─ ┴ <- (┴) - ═ - ~├ (┴BSOLUTE,╪) 3/4'1
* ╔╬├ $╞┼ ═ <- (═) + 1 (┴BSOLUTE,╪) 3/7
╔╙┬ $╞╞ ═ <- (═) - 1,┴ <- (┴)-═-~├ (┴BSOLUTE,╪) 3/7
'1 - ┴DD ONE IF ADDRESS CROSSES A PAGE BOUNDRY.
'2 - ┴DD 1 IF BRANCH SUCCEEDS, OR 2 IF INTO ANOTHER PAGE.
'3 - ╔F PAGE BOUNDRY CROSSED THEN ╨├╚+1 IS JUST ╨├╚
'4 - ╙OURCES DISPUTED ON EXACT OPERATION, OR SOMETIMES DOES NOT WORK.
'5 - ╞ULL EIGHT BIT ROTATION (WITH CARRY)
╙OURCES:
╨ROGRAMMING THE 6502, ╥ODNEY ┌AKS, (C) 1983 ╙YBEX
╨AUL ╧JALA, ╨OST TO ├OMP.╙YS.├BM (PO87553@CS.TUT.FI / ALBERT@CC.TUT.FI)
─ ╩OHN ═CKENNA, ╨OST TO ├OMP.╙YS.├BM (GUDJM@UNIWA.UWA.OZ.AU)
├OMPILED BY ├RAIG ╘AYLOR (DUCK@PEMBVAX1.PEMBROKE.EDU)
==============================================================================
╙IMPLE ╚IRES ╠INE ─RAWING ╨ACKAGE FOR THE ├-128 80-├OLUMN ╙CREEN
├OPYRIGHT (C) 1992 ├RAIG ┬RUCE <F2RX@JUPITER.SUN.CSD.UNB.CA>
1. ╟╥┴╨╚╔├╙ ╨┴├╦┴╟┼ ╧╓┼╥╓╔┼╫
╘HE GRAPHICS PACKAGE THIS ARTICLE EXPLAINS IS ┬╠╧┴─ED INTO MEMORY AT ADDRESS
$1300 ON BANK 15 AND HAS THREE ENTRY POINTS:
$1300 = MOVE THE PIXEL CURSOR OR DRAW A LINE: .┴╪=X, .┘=Y, .├=CMD
$1303 = ACTIVATE GRAPHICS MODE AND CLEAR THE SCREEN
$1306 = EXIT GRAPHICS MODE AND RELOAD THE CHARACTER SET
╘O MOVE THE PIXEL CURSOR TO THE START POINT OF A LINE, LOAD THE .┴╪ REGISTERS
WITH THE ╪ COORDINATE (0-639), LOAD THE .┘ REGISTER WITH THE ┘ COORDINATE
(0-199), CLEAR THE CARRY FLAG, AND CALL $1300. (═AKE SURE THAT ┬ANK 15 IS IN
CONTEXT). ╘HIS CAN BE DONE IN ┬┴╙╔├ AS FOLLOWS:
╙┘╙ 4864, ╪ ┴╬─ 255, ╪/256, ┘, 0
╘O DRAW A LINE FROM THE PIXEL CURSOR LOCATION TO A GIVEN POINT, LOAD THE .┴╪
AND .┘ REGISTERS LIKE BEFORE, SET THE CARRY FLAG, AND CALL $1300. ╘HE PIXEL
CURSOR WILL THEN BE SET TO THE END POINT OF THE LINE JUST DRAWN, SO YOU DO NOT
HAVE TO SET IT AGAIN IF YOU ARE DRAWING A CONTINUOUS OBJECT (LIKE A SQUARE).
╙┘╙ 4864, ╪ ┴╬─ 255, ╪/256, ┘, 1
╘HE ACTIVATE AND EXIT ROUTINES ARE CALLED WITHOUT ANY PARAMETERS AND WORK VERY
SIMPLY. ┘OU SHOULD BE SURE TO CALL EXIT BEFORE RETURNING TO THE PROGRAM
EDITING MODE OR YOU WILL NOT BE ABLE TO SEE WHAT YOU ARE TYPING.